|
RAIS
3.2
|
00001 using System; 00002 using System.Collections.Generic; 00003 using System.Linq; 00004 using System.Text; 00005 using System.Data; 00006 using System.Data.SqlClient; 00007 namespace FillCustomQueryTableCL 00008 { 00009 public class PreselectionListQuery : Query 00010 { 00011 private List<string> correctParameters = new List<string>(); 00012 private static string QueryTypeName = "Preselection List"; 00013 private readonly string GetParametersQuery = 00014 "SELECT " + 00015 " 0 FromMask, " + 00016 " [Dynamic Mask Filter].[Dynamic Mask Filter Name] [Name], " + 00017 " [Dynamic Mask Filter].[Order], " + 00018 " min([Dynamic Mask Filter].[Query Name]) RelatedQuery, " + 00019 " min([Dynamic Mask Filter].[FK Table ID]) RelatedTable, " + 00020 " max([Dynamic Mask Filter].[Visible On Form]) [Visible On Form] " + 00021 "FROM [Dynamic Mask Filter] " + 00022 " LEFT JOIN [Dynamic Mask] on [PK Dynamic Mask ID]=[FK Dynamic Mask ID] " + 00023 " LEFT JOIN [Dynamic Mask Type] on [PK Dynamic Mask Type ID]=[FK Dynamic Mask Type ID] " + 00024 "WHERE [Dynamic Mask].[Query Name]='{0}' and [Use In Query]=1 " + 00025 "GROUP BY [Dynamic Mask Filter].[Dynamic Mask Filter Name], [Dynamic Mask Filter].[Order] " + 00026 "UNION " + 00027 "SELECT " + 00028 " 1 FromSys, sys.parameters.name [Name], sys.parameters.parameter_id, " + 00029 " sys.types.name TypeName, null, null " + 00030 "FROM sys.parameters " + 00031 " LEFT JOIN sys.objects on sys.parameters.object_id=sys.objects.object_id " + 00032 " LEFT JOIN sys.types ON sys.parameters.user_type_id=sys.types.user_type_id " + 00033 "WHERE sys.objects.name='{0}' " + 00034 "ORDER BY FromMask, [Dynamic Mask Filter].[Order] "; 00035 00036 public PreselectionListQuery(string name) 00037 : base(name, QueryTypeName) 00038 { 00039 LoadParameters(GetParametersQuery); 00040 } 00041 00042 public PreselectionListQuery(string name, string queryTypeName, string getParametersQuery) 00043 : base(name, queryTypeName) 00044 { 00045 LoadParameters(getParametersQuery); 00046 } 00047 00048 private void LoadParameters(string getParametersQuery) 00049 { 00050 00051 using (SqlCommand sqlCommand = new SqlCommand("", sqlConnection)) 00052 { 00053 sqlCommand.CommandText = string.Format(getParametersQuery, Name); 00054 int order = 0; 00055 using (SqlDataReader reader = sqlCommand.ExecuteReader()) 00056 { 00057 Dictionary<int, string[]> fromMask = new Dictionary<int, string[]>(); 00058 Dictionary<int, string[]> fromSys = new Dictionary<int, string[]>(); 00059 00060 while (reader.Read()) 00061 { 00062 if ((int)reader["FromMask"] == 0) 00063 { 00064 PreСorrectParameters(reader); 00065 string tabId; 00066 string relQuery; 00067 order++; 00068 if (reader["RelatedTable"] != DBNull.Value) tabId = reader["RelatedTable"].ToString(); 00069 else tabId = "-1"; 00070 if (reader["RelatedQuery"] != DBNull.Value ) relQuery = reader["RelatedQuery"].ToString(); 00071 else relQuery = ""; 00072 00073 fromMask[order] = new string[3] { (string)reader["Name"], relQuery, tabId }; 00074 } 00075 else fromSys[(int)reader["Order"]] = new string[2] { (string)reader["Name"], (string)reader["RelatedQuery"] }; 00076 } 00077 order = 1; 00078 string type; 00079 if (fromMask.Count == 0) 00080 { 00081 this.Type = QueryTypes["Other"]; 00082 for (int i = 1; i <= fromSys.Count; i++ ) 00083 Parameters.Add(new Parameter(Name, fromSys[i][0].Substring(1), fromSys[i][0].Substring(1), GetTypeFromSQLType(fromSys[i][1]), -1, "", i)); 00084 } 00085 else 00086 { 00087 for (int i = 1; i <= fromMask.Count; i++) 00088 { 00089 string relQuery = fromMask[i][1]; 00090 int tabId = int.Parse(fromMask[i][2]); 00091 string querName = fromMask[i][0]; 00092 00093 if (querName == "DatesRange") 00094 { 00095 type = "DatesRangeStartDate"; 00096 querName = "StartDate"; 00097 } 00098 else if (querName == "User") 00099 type = "UserID"; 00100 else if (relQuery != "") 00101 type = "LookupFromQuery"; 00102 else if (tabId != -1) 00103 type = "LookupFromTable"; 00104 else type = GetTypeFromSQLType(fromSys[order][1]); 00105 00106 Parameters.Add(new Parameter(Name, fromSys[order][0].Substring(1), querName, type, tabId, relQuery, order)); 00107 order++; 00108 if (type == "DatesRangeStartDate") 00109 { 00110 querName = "EndDate"; 00111 type = "DatesRangeEndDate"; 00112 Parameters.Add(new Parameter(Name, fromSys[order][0].Substring(1), querName, type, tabId, relQuery, order)); 00113 order++; 00114 } 00115 } 00116 } 00117 СorrectParameters(); 00118 } 00119 } 00120 } 00121 00122 protected override void PreСorrectParameters(System.Data.SqlClient.SqlDataReader reader) 00123 { 00124 if ((int)reader["FromMask"] == 0 && reader["Visible On Form"].ToString() == "0") 00125 correctParameters.Add(((string)reader["Name"]).ToLower().Trim()); 00126 } 00127 protected override void СorrectParameters() 00128 { 00129 foreach (Parameter par in Parameters) 00130 { 00131 if (par.VisibleName.ToLower().Trim() == "facility" && correctParameters.Contains("facility")) 00132 par.TypeName = "PreselectedFacility"; 00133 else if (par.VisibleName.ToLower().Trim() == "department" && correctParameters.Contains("department")) 00134 par.TypeName = "PreselectedDepartment"; 00135 } 00136 } 00137 } 00138 }